package cn.cdeden.knowledge.controller.label;

import cn.cdeden.common.core.domain.R;
import cn.cdeden.common.core.utils.page.TableDataInfo;
import cn.cdeden.common.satoken.utils.LoginHelper;
import cn.cdeden.knowledge.domain.dto.FilesLabelDto;
import cn.cdeden.knowledge.domain.dto.FilesLabelList;
import cn.cdeden.knowledge.domain.dto.FilesLabelQueryParam;
import cn.cdeden.knowledge.enums.FileLabelTypeEnums;
import cn.cdeden.knowledge.enums.TeamParamEnum;
import cn.cdeden.knowledge.service.FilesLabelService;
import cn.cdeden.knowledge.service.TeamMemberService;
import io.undertow.util.BadRequestException;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.data.domain.Pageable;
import org.springframework.web.bind.annotation.*;

/**
 * 用户：标签: 文档管理
 */
@RestController
@RequiredArgsConstructor
//@Api(tags = "标签: 文档管理")
@RequestMapping("/filesUserLabel")
public class FilesLabelController {


    private final FilesLabelService filesUserLabelService;

    private final TeamMemberService teamMemberService;
    /**
     * 查询用户标签
     * @param query
     * @param pageable
     * @return
     */
    @GetMapping("/query")
//    @Log("查询用户标签")
//    @ApiOperation("查询用户标签")
    public R<TableDataInfo<FilesLabelDto>> query(FilesLabelQueryParam query, Pageable pageable) {
        query.setLabelType(FileLabelTypeEnums.user.getCode());
        TableDataInfo<FilesLabelDto> filesLabelDtoTableDataInfo = filesUserLabelService.queryAll(query, pageable);
        return R.ok(filesLabelDtoTableDataInfo);
    }


    /**
     * 新增用户标签
     * @param resources
     * @return
     */
    @PostMapping("/create")
//    @Log("新增用户标签")
//    @ApiOperation("新增用户标签")
//    @PreAuthorize("@el.check('filesUserLabel:add')")
    public R create(@Valid @RequestBody FilesLabelDto resources) throws BadRequestException {

        resources.setLabelType(FileLabelTypeEnums.user.getCode());
        FilesLabelDto insert = filesUserLabelService.insert(resources);
        return insert != null ? R.ok(insert) : R.fail("添加失败");
//        return insert != null ? R.successResult(insert) : R.errorResult("添加失败");
    }


    /**
     * 修改用户标签
     * @param resources
     * @return
     */
    @PostMapping("/update")
//    @Log("修改用户标签")
//    @ApiOperation("修改用户标签")
    public R update(@Valid @RequestBody FilesLabelDto resources) throws BadRequestException {
//        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
        return filesUserLabelService.updateById(resources) ? R.ok() : R.fail("修改失败");
//        return filesUserLabelService.updateById(resources) ? R.success() : R.errorResult("修改失败");
    }


    /**
     * 删除用户标签
     * @param data
     * @return
     */
    @PostMapping("/v2/delete")
//    @Log("删除用户标签")
//    @ApiOperation("删除用户标签")
    public R delete(@RequestBody FilesLabelList data) {
        return filesUserLabelService.deleteByIdsAndType(data.getLabelId(), null, FileLabelTypeEnums.user.getCode(), data.isIs());
    }

//=============================================团队标签================================

    @GetMapping("/queryTeam")
//    @Log("标签: 查询团队文档标签")
//    @ApiOperation("标签: 查询团队文档标签")
    public R<TableDataInfo<FilesLabelDto>> queryTeam(FilesLabelQueryParam query, Pageable pageable) {
        return R.ok(filesUserLabelService.queryAllTeam(query,pageable));
    }


    /**
     * @author Yu.
     * @Description // 新增团队文档标签
     * @Date 2023/10/23 16:14
     * @param resources
     * @return com.cdyd.ecm.resp.R
     **/
    @PostMapping("/createTeam")
//    @Log("标签: 新增团队文档标签")
//    @ApiOperation("标签: 新增团队文档标签")
    public R createTeam(@Valid @RequestBody FilesLabelDto resources) throws BadRequestException {
        resources.setLabelType(FileLabelTypeEnums.team.getCode());
        if ( resources.getParentId() == null) {
            resources.setParentId(0L);
        }
        String teamId = resources.getTeamId();
        if (StringUtils.isBlank(teamId)) {
            throw new RuntimeException("缺失关键词团队参数");
        }
        //判断当前用户有没有权限去创建和修改
        if (!teamMemberService.checkPermission(teamId,
            LoginHelper.getLoginUser(), TeamParamEnum.LABEL.getParam())) {
            throw  new RuntimeException("没有权限去添加团队标签,请联系团队管理员授权");
        }

        FilesLabelDto insert = filesUserLabelService.insert(resources);
        return insert != null ? R.ok(insert) : R.fail("添加失败");
    }



    /**
     * @author Yu.
     * @Description // 修改团队文档标签
     * @Date 2023/10/23 16:14
     * @param resources
     * @return com.cdyd.ecm.resp.R
     **/
    @PostMapping("/updateTeam")
//    @Log("标签:修改团队文档标签")
//    @ApiOperation("标签:修改团队文档标签")
    public R updateTeam(@RequestBody FilesLabelDto resources) throws BadRequestException {
        String teamId = resources.getTeamId();
        if (StringUtils.isBlank(teamId)) {
            throw new RuntimeException("缺失关键词团队参数");
        }
        //判断当前用户有没有权限去创建和修改
        //判断当前用户有没有权限去创建和修改
        if (!teamMemberService.checkPermission(teamId,
            LoginHelper.getLoginUser(), TeamParamEnum.LABEL.getParam())) {
            throw  new RuntimeException("没有权限去修改团队标签,请联系团队管理员授权");
        }
//        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
        return filesUserLabelService.updateById(resources) ? R.ok() : R.fail("修改失败");
    }


    @PostMapping("/deleteTeam")
//    @Log("标签:删除团队文档标签")
//    @ApiOperation("标签:删除团队文档标签")
    public R deleteTeam(@RequestBody FilesLabelList resources) {

        String teamId = resources.getTeamId();
        if (StringUtils.isBlank(teamId)) {
            throw new RuntimeException("缺失关键词团队参数");
        }
        //判断当前用户有没有权限去创建和修改
        if (!teamMemberService.checkPermission(teamId,
            LoginHelper.getLoginUser(), TeamParamEnum.LABEL.getParam())) {
            return R.fail("415","没有权限去删除团队标签,请联系团队管理员授权");
        }

        return filesUserLabelService.deleteByIdsAndType(resources.getLabelId(), teamId, FileLabelTypeEnums.team.getCode(), resources.isIs());
    }

}
